home *** CD-ROM | disk | FTP | other *** search
/ Windows 95 API Bible / Windows 95 API Bible 3 Disc Set.iso / Win32 API Bible Book 1 of 3.iso / chapte25 / ex17.c < prev    next >
C/C++ Source or Header  |  1995-04-23  |  2KB  |  62 lines

  1. #include <genstub.c>
  2.  
  3. // Define these options in an rc file.
  4. #define IDM_INC    201  // &Increment
  5. #define IDM_DEC    202  // &Decrement
  6. #define IDM_EXC    203  // &Exchange
  7.  
  8. // Windows message procedure.
  9. LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
  10. {
  11.     static HANDLE   hMap = 0;
  12.     static LONG *lpData = NULL;
  13.  
  14.     switch (uMsg) {
  15.             case WM_CREATE:
  16.                     // Create file mapping object.
  17.                     hMap = CreateFileMapping( (HANDLE) 0xFFFFFFFF, NULL,
  18.                                               PAGE_READWRITE, 0, 4096,
  19.                                               "SHARED_VALUE");
  20.                     lpData = (LONG *) MapViewOfFile( hMap, FILE_MAP_ALL_ACCESS,
  21.                                                      0, 0, 4 );
  22.                     return DefWindowProc( hWnd, uMsg, wParam, lParam );
  23.             case WM_COMMAND:
  24.                {
  25.                     TCHAR szOperation[128];
  26.                     *szOperation = 0;
  27.                     switch ( LOWORD( wParam ) )
  28.                     {
  29.                         case IDM_INC:
  30.                               InterlockedIncrement( lpData );
  31.                               lstrcpy( szOperation, "Increment" );
  32.                         break;
  33.                         case IDM_DEC:
  34.                               InterlockedDecrement( lpData );
  35.                               lstrcpy( szOperation, "Decrement" );
  36.                         break;
  37.                         case IDM_EXC:
  38.                               InterlockedExchange( lpData, (LONG)hWnd );
  39.                               lstrcpy( szOperation, "Exchange" );
  40.                         break;
  41.                         case IDM_EXIT:
  42.                               DestroyWindow( hWnd );
  43.                         break;
  44.                     }
  45.                     if ( *szOperation )
  46.                     {
  47.                         TCHAR szBuffer[128];
  48.                         wsprintf( szBuffer, "Interlocked Value: %ld", *lpData );
  49.                         MessageBox( hWnd, szBuffer, szOperation, MB_OK );
  50.                     }
  51.             }
  52.             break;
  53.             case WM_DESTROY:
  54.                     if ( hMap )
  55.                        CloseHandle( hMap );
  56.                     PostQuitMessage( 0 );
  57.                     break;
  58.             default:
  59.                  return DefWindowProc( hWnd, uMsg, wParam, lParam );
  60.     }
  61.     return NULL;
  62. }